this._keyboardController = new KeyboardController();
- this._groups = {};
this._currentPage = null;
this._suggestions = new Suggestions();
}
}
- _createLayersForGroup(groupName) {
+ _updateLayoutForGroup(groupName) {
let keyboardModel = new KeyboardModel(groupName);
- let layers = {};
let levels = keyboardModel.getLevels();
+ let layers = {};
+ let layout = new Clutter.Actor({
+ layout_manager: new Clutter.BinLayout(),
+ x_expand: true,
+ y_expand: true,
+ });
for (let i = 0; i < levels.length; i++) {
let currentLevel = levels[i];
/* There are keyboard maps which consist of 3 levels (no uppercase,
*/
let level = i >= 1 && levels.length === 3 ? i + 1 : i;
- let layout = new KeyContainer();
- layout.shiftKeys = [];
- layout.mode = currentLevel.mode;
-
- this._loadRows(currentLevel, level, levels.length, layout);
- layers[level] = layout;
- this._aspectContainer.add_child(layout);
- layout.layoutButtons();
+ let levelLayout = new KeyContainer();
+ levelLayout.shiftKeys = [];
+ levelLayout.mode = currentLevel.mode;
- layout.hide();
+ this._loadRows(currentLevel, level, levels.length, levelLayout);
+ layers[level] = levelLayout;
+ layout.add_child(levelLayout);
+ levelLayout.layoutButtons();
+ levelLayout.hide();
}
- return layers;
+ this._aspectContainer.add_child(layout);
+ this._currentLayout?.destroy();
+ this._currentLayout = layout;
+ this._layers = layers;
}
_ensureKeys() {
else
group = this._keyboardController.getCurrentGroup();
- if (!this._groups[group])
- this._groups[group] = this._createLayersForGroup(group);
+ this._updateLayoutForGroup(group);
}
_addRowKeys(keys, layout) {
}
_onKeyboardGroupsChanged() {
- let nonGroupActors = [this._emojiSelection, this._keypad];
- this._aspectContainer.get_children().filter(c => !nonGroupActors.includes(c)).forEach(c => {
- c.destroy();
- });
-
- this._groups = {};
this._onGroupChanged();
}
}
_setActiveLayer(activeLevel) {
- let activeGroupName = this._keyboardController.getCurrentGroup();
- let layers = this._groups[activeGroupName];
+ const layers = this._layers;
let currentPage = layers[activeLevel];
if (this._currentPage === currentPage) {